package leetcode_day._2023._11;

/**
 * 1410.HTML 实体解析器 <br />
 * 算法: 模拟
 *
 * @author yezh
 * @date 2023/11/23 10:36
 */
public class _23 {

    public String entityParser(String text) {
        StringBuilder ans = new StringBuilder();
        int len = text.length();
        for (int i = 0, j; i < len; ) {
            if (text.charAt(i) == '&') {
                j = i + 1;
                // 去掉连续的 &
                while (j < len && text.charAt(j) == '&') {
                    ans.append('&');
                    ++j;
                }
                // 从 & 开始
                i = j - 1;
                while (j < len && text.charAt(j) != ';' && text.charAt(j) != '&') ++j;
                if (j < len) {
                    if (text.charAt(j) == ';') ans.append(convert(text.substring(i, j + 1)));
                    else if (text.charAt(j) == '&') ans.append(text, i, j--);
                } else ans.append(text, i, j);
                i = j + 1;
                continue;
            }
            ans.append(text.charAt(i++));
        }
        return ans.toString();
    }

    String convert(String s) {
        switch (s) {
            case "&quot;":
                return "\"";
            case "&apos;":
                return "'";
            case "&amp;":
                return "&";
            case "&gt;":
                return ">";
            case "&lt;":
                return "<";
            case "&frasl;":
                return "/";
            default:
                return s;
        }
    }

}
